package modelo.ladron;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import modelo.geografia.Ciudad;
import modelo.objeto.Comun;
import modelo.objeto.MuyValioso;
import modelo.objeto.ObjetoRobado;
import modelo.objeto.Valioso;


public class EstrategiaDeEscape {
	
	private List<Ciudad> rutaDeEscape;
	private int numeroCiudadActual;
	private Ciudad ciudadActual;
	private int cantidadDeCiudadesDeEscape;

	public EstrategiaDeEscape(List<Ciudad> ciudadesPosibles, ObjetoRobado objeto){
		rutaDeEscape = new ArrayList<Ciudad>();
		objeto.quienSosParaCiudadesDeEscape(this);
		ciudadActual = objeto.getCiudadALaQuePertenece();		
		numeroCiudadActual = 0;
		llenarRutaDeEscape(ciudadesPosibles);
	}
	public void setearCantidadDeCiudades(Comun objeto){
		this.cantidadDeCiudadesDeEscape = 4;
	}
	public void setearCantidadDeCiudades(Valioso objeto){
		this.cantidadDeCiudadesDeEscape = 5;
	}
	public void setearCantidadDeCiudades(MuyValioso objeto){
		this.cantidadDeCiudadesDeEscape = 7;
	}
	private void llenarRutaDeEscape(List<Ciudad> ciudadesPosibles){
		rutaDeEscape.add(ciudadActual);
		Ciudad ciudadAAgregar = null;
		while (rutaDeEscape.size() < cantidadDeCiudadesDeEscape) {
			Collections.shuffle(ciudadesPosibles);
			ciudadAAgregar = ciudadesPosibles.get(0);
			if (!(rutaDeEscape.contains(ciudadAAgregar))) rutaDeEscape.add(ciudadAAgregar);
		}				
	}
	public List<Ciudad> getRutaDeEscape(){
		return rutaDeEscape;
	}
	public int getCantidadDeCiudadesDeEscape(){
		return cantidadDeCiudadesDeEscape;
	}
	public Ciudad proximaCiudad(){
		if ((numeroCiudadActual+1) != cantidadDeCiudadesDeEscape){
			ciudadActual = rutaDeEscape.get(numeroCiudadActual+1);
			numeroCiudadActual++;
		}
		return ciudadActual;
	}
}
